package br.com.virtual.recomendar.service.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import br.com.virtual.cadastrar.model.Pessoa;
import br.com.virtual.cadastrar.model.Produto;
import br.com.virtual.cadastrar.service.PessoaService;
import br.com.virtual.recomendar.model.Avaliacao;
import br.com.virtual.recomendar.service.LocalizadorPessoasSemelhantes;
import br.com.virtual.recomendar.service.LocalizadorProdutosRecomendar;
import br.com.virtual.recomendar.service.RecomendadorService;

@Stateless
public class RecomendadorServiceImpl implements RecomendadorService {

	@EJB PessoaService pessoaService;
	
	@Override
	public List<Produto> gerarRecomendacao(Pessoa cliente) {
		
		List<Produto> produtosRecomendados = Collections.emptyList();
		
		cliente = pessoaService.loadAvaliacao(cliente);
		List<Produto> produtosAvaliadosCliente = getProdutosAvaliadosCliente(cliente);
		List<Pessoa> possiveisSemelhantes = pessoaService.getCandidatosASemelhante(produtosAvaliadosCliente);
		
		LocalizadorPessoasSemelhantes localizadorSemelhantes = new LocalizadorPessoasSemelhantesImpl(cliente, possiveisSemelhantes);
		
		Map<Pessoa, Float> semelhantes = localizadorSemelhantes.listarSemelhantes();
		LocalizadorProdutosRecomendar localizadorProdutosRecomendar = new LocalizadorProdutosRecomendarImpl(semelhantes, produtosAvaliadosCliente);
		
	 	produtosRecomendados = localizadorProdutosRecomendar.gerarRecomendacoes();
//		produtosRecomendados.removeAll(produtosAvaliadosCliente);
//	 	
		
		return produtosRecomendados;
	}
	
	private List<Produto> getProdutosAvaliadosCliente(Pessoa cliente){
		
		List<Produto> produtosAvaliados = new ArrayList<Produto>();
		
		for (Avaliacao avaliacao : cliente.getAvaliacoes())
			produtosAvaliados.add(avaliacao.getProduto());
		
		return produtosAvaliados;
		
	}

}
